package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import negocio.Funcionario;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author abacrazy
 */
public class FuncionarioDAO {

    public List<Funcionario> listarFuncionario() throws SQLException {
        List<Funcionario> funcionarios = new ArrayList();
        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("SELECT * FROM funcionarios");
        ResultSet rs = pstmt.executeQuery();

        while (rs.next()) {
            Funcionario f = new Funcionario();
            preencherObjeto(f, rs);
            System.out.println("fhuadhfuasdhfds" + f);
            funcionarios.add(f);
        }
        pstmt.close();
        return funcionarios;
    }

    public Funcionario localizar(int codigo) throws SQLException {
        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("SELECT * FROM funcionarios WHERE id_funcionario =?");
        pstmt.setInt(1, codigo);

        ResultSet rs = pstmt.executeQuery();

        Funcionario f = null;

        if (rs.next()) {
            f = new Funcionario();
            preencherObjeto(f, rs);
        }
        pstmt.close();
        return f;
    }

    public Funcionario localizarPorCpf(String cpf) throws SQLException {
        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("SELECT * FROM funcionarios WHERE cpf LIKE?");

        pstmt.setString(1, cpf);

        ResultSet rs = pstmt.executeQuery();

        Funcionario f = null;

        if (rs.next()) {
            f = new Funcionario();
            preencherObjeto(f, rs);
        }
        pstmt.close();
        return f;

    }

    public int adicionar(Funcionario f) throws SQLException {
        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("INSERT INTO funcionarios VALUES (?,?,?,?,?,?,?,?)");
        pstmt.setInt(1, f.getId());
        pstmt.setString(2, f.getNome());
        pstmt.setString(3, f.getEndereco());
        pstmt.setString(4, f.getBairro());
        pstmt.setString(5, f.getCargo());
        pstmt.setString(6, f.getCpf());
        pstmt.setString(7, f.getRg());
        pstmt.setString(8, f.getTelefone());

        int resultado = pstmt.executeUpdate();

        pstmt.close();

        return resultado;
    }

    public int atualizar(Funcionario f) throws SQLException {
        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("UPDATE funcionarios SET nome = ?, endereco = ?" +
                "bairro = ?, cargo = ?, cpf = ?, rg =?, telefone = ? WHERE id_funcionario = ?");

        pstmt.setString(1, f.getNome());
        pstmt.setString(2, f.getEndereco());
        pstmt.setString(3, f.getBairro());
        pstmt.setString(4, f.getCargo());
        pstmt.setString(5, f.getCpf());
        pstmt.setString(6, f.getRg());
        pstmt.setString(7, f.getTelefone());
        pstmt.setInt(8, f.getId());

        int resultado = pstmt.executeUpdate();

        pstmt.close();

        return resultado;
    }

    public int remover(Funcionario f) throws SQLException {

        PreparedStatement pstmt = BDUtil.getConexao().prepareStatement("DELETE FROM funcionarios WHERE id_funcionario = ?");

        pstmt.setInt(1, f.getId());

        int resultado = pstmt.executeUpdate();

        pstmt.close();

        return resultado;
    }

    private void preencherObjeto(Funcionario f, ResultSet rs) throws SQLException {
        f.setId(rs.getInt("id_funcionario"));
        f.setNome(rs.getString("nome"));
        f.setBairro(rs.getString("bairro"));
        f.setEndereco(rs.getString("endereco"));
        f.setCargo(rs.getString("cargo"));
        f.setCpf(rs.getString("cpf"));
        f.setRg(rs.getString("rg"));
        f.setTelefone(rs.getString("telefone"));

    }
}
